﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TOAcademias;

namespace DAOAcademias
{

    /*************************************
    Autor: Carlos Sánchez
    Fecha de Creación: 06/02/2011
    Descripción de la Funcionalidad: Clase que contiene metodos que serviran para dar
    soporte a los registros de la entidad MatriculaSeccion.
    **************************************/

    public class DOMatriculaSeccion
    {

         DBModuloAcademiasDataContext dbml;

         public DOMatriculaSeccion()
        {
            dbml = new DBModuloAcademiasDataContext();
        }

         public List<TOMatriculaSeccion> obtenerMatriculaSeccion()
         {
             List<TOMatriculaSeccion> listaMatriculas = new List<TOMatriculaSeccion>();

             var matriculas = (from matsec in dbml.MATRICULA_SECCIONs
                               select matsec
                              );

             foreach (var matricula in matriculas)
             {

                 TOMatriculaSeccion toMatriculaSeccion = new TOMatriculaSeccion();
                 toMatriculaSeccion.CodigoMatricula = matricula.COD_MATRICULA;
                 toMatriculaSeccion.CodigoSeccion = matricula.COD_SECCION;
                 toMatriculaSeccion.Fecha = matricula.FEC_MS;

                 listaMatriculas.Add(toMatriculaSeccion);

             }

             return listaMatriculas;
         }

         public List<TOMatriculaSeccion> obtenerMatriculaSeccionxSeccion(String CodigoSeccion)
         {
             List<TOMatriculaSeccion> listaMatriculas = new List<TOMatriculaSeccion>();

             var matriculas = (from matsec in dbml.MATRICULA_SECCIONs
                               where matsec.COD_SECCION==CodigoSeccion
                               select matsec
                              );

             foreach (var matricula in matriculas)
             {

                 TOMatriculaSeccion toMatriculaSeccion = new TOMatriculaSeccion();
                 toMatriculaSeccion.CodigoMatricula = matricula.COD_MATRICULA;
                 toMatriculaSeccion.CodigoSeccion = matricula.COD_SECCION;
                 toMatriculaSeccion.Fecha = matricula.FEC_MS;

                 listaMatriculas.Add(toMatriculaSeccion);

             }

             return listaMatriculas;
         }


         public List<TOMatriculaSeccion> obtenerMatriculaSeccionxMatricula(String CodigoMatricula)
         {
             List<TOMatriculaSeccion> listaMatriculas = new List<TOMatriculaSeccion>();

             var matriculas = (from matsec in dbml.MATRICULA_SECCIONs
                               where matsec.COD_MATRICULA == CodigoMatricula
                               select matsec
                              );

             foreach (var matricula in matriculas)
             {

                 TOMatriculaSeccion toMatriculaSeccion = new TOMatriculaSeccion();
                 toMatriculaSeccion.CodigoMatricula = matricula.COD_MATRICULA;
                 toMatriculaSeccion.CodigoSeccion = matricula.COD_SECCION;
                 toMatriculaSeccion.Fecha = matricula.FEC_MS;

                 listaMatriculas.Add(toMatriculaSeccion);

             }

             return listaMatriculas;
         }


        public List<TOMatriculaSeccion> obtenerMatriculaSeccionxSocio(String CodigoSocio)
        {
            List<TOMatriculaSeccion> listaMatriculas = new List<TOMatriculaSeccion>();

            var matriculas = (from matsec in dbml.MATRICULA_SECCIONs
                              join mat in dbml.MATRICULAs
                              on matsec.COD_MATRICULA equals mat.COD_MATRICULA
                              join sec in dbml.SECCIONs
                              on matsec.COD_SECCION equals sec.COD_SECCION
                              join pla in dbml.PLANIFICACIONs
                              on sec.COD_PLANIFICACION equals pla.COD_PLANIFICACION
                              join aca in dbml.ACADEMIAs
                              on pla.COD_ACADEMIA equals aca.COD_ACADEMIA
                              join pe in dbml.PERIODOs
                              on mat.COD_PERIODO equals pe.COD_PERIODO
                              where pe.ESTADO=="ACTIVO" && mat.COD_SOCIO == CodigoSocio
                              select new { matsec.COD_SECCION, matsec.COD_MATRICULA, matsec.FEC_MS,aca.DES_ACADEMIA }
                             );

            foreach (var matricula in matriculas)
            {

                TOMatriculaSeccion toMatriculaSeccion = new TOMatriculaSeccion();
                toMatriculaSeccion.CodigoSeccion = matricula.COD_SECCION;
                toMatriculaSeccion.CodigoMatricula = matricula.COD_MATRICULA;                
                toMatriculaSeccion.Fecha = matricula.FEC_MS;
                toMatriculaSeccion.Academia = matricula.DES_ACADEMIA;
                listaMatriculas.Add(toMatriculaSeccion);

            }

            return listaMatriculas;
        }

        public Boolean obtenerEstadoMatriculaSeccionxSocio(String CodigoSocio,String CodigoSeccion)
        {

            var matricula = (from matsec in dbml.MATRICULA_SECCIONs
                              join mat in dbml.MATRICULAs
                              on matsec.COD_MATRICULA equals mat.COD_MATRICULA
                              join sec in dbml.SECCIONs
                              on matsec.COD_SECCION equals sec.COD_SECCION
                              join pe in dbml.PERIODOs
                              on mat.COD_PERIODO equals pe.COD_PERIODO
                              where pe.ESTADO == "ACTIVO" && mat.COD_SOCIO == CodigoSocio && matsec.COD_SECCION==CodigoSeccion
                              select matsec
                             ).Count();

            if (Convert.ToInt32(matricula.ToString()) == 0)
                return false;
            else
                return true;
        }

        public void insertarMatriculaSeccion(String CodigoSocio,TOMatriculaSeccion toMatriculaSeccion)
        {

            if (obtenerEstadoMatriculaSeccionxSocio(CodigoSocio, toMatriculaSeccion.CodigoSeccion) == false)
            {
                MATRICULA_SECCION mat = new MATRICULA_SECCION();
                mat.COD_MATRICULA = toMatriculaSeccion.CodigoMatricula;
                mat.COD_SECCION = toMatriculaSeccion.CodigoSeccion;
                mat.FEC_MS = toMatriculaSeccion.Fecha;

                dbml.MATRICULA_SECCIONs.InsertOnSubmit(mat);
                dbml.SubmitChanges();

                actualizarMontoMatricula(toMatriculaSeccion.CodigoMatricula);
            }

        }


        public void eliminarMatriculaSeccion(String CodigoSocio, TOMatriculaSeccion toMatriculaSeccion)
        {
            if (obtenerEstadoMatriculaSeccionxSocio(CodigoSocio, toMatriculaSeccion.CodigoSeccion) == true)
            {
                var matricula = (from matsec in dbml.MATRICULA_SECCIONs
                                 where matsec.COD_MATRICULA == toMatriculaSeccion.CodigoMatricula && matsec.COD_SECCION == toMatriculaSeccion.CodigoSeccion
                                 select matsec).Single();

                dbml.MATRICULA_SECCIONs.DeleteOnSubmit(matricula);
                dbml.SubmitChanges();

                actualizarMontoMatricula(toMatriculaSeccion.CodigoMatricula);
            }            

        }

        public void eliminarMatriculaSeccionxMatricula(String CodigoMatricula)
        {
            //if (obtenerEstadoMatriculaSeccionxSocio(CodigoSocio, toMatriculaSeccion.CodigoSeccion) == true)
            //{
            
                List<TOMatriculaSeccion> listaMatriculas = new List<TOMatriculaSeccion>();

                var matriculas = (from matsec in dbml.MATRICULA_SECCIONs
                                 where matsec.COD_MATRICULA == CodigoMatricula
                                 select matsec);

                foreach (var matricula in matriculas)
                {
                    dbml.MATRICULA_SECCIONs.DeleteOnSubmit(matricula);
                    dbml.SubmitChanges();
                }

                actualizarMontoMatricula(CodigoMatricula);
            //}
                
        }


        public void actualizarMontoMatricula(String CodigoMatricula)
        {

            List<TOMatriculaSeccion> matriculas = obtenerMatriculaSeccionxMatricula(CodigoMatricula);
            Decimal decPrecioAcademia = Convert.ToDecimal(100.0);
            Int32 intCantidadAcademias = matriculas.Count;


            var matricula = (from mat in dbml.MATRICULAs
                             where mat.COD_MATRICULA ==CodigoMatricula
                             select mat).Single();

            matricula.MON_PAGO = decPrecioAcademia*intCantidadAcademias;

            dbml.SubmitChanges();

        }

        public void modificarMatriculaSeccion(TOMatriculaSeccion toMatriculaSeccion)
        {
            var matricula = (from matsec in dbml.MATRICULA_SECCIONs
                             where matsec.COD_MATRICULA == toMatriculaSeccion.CodigoMatricula
                             select matsec).Single();

            matricula.COD_MATRICULA = toMatriculaSeccion.CodigoMatricula;
            matricula.COD_SECCION = toMatriculaSeccion.CodigoSeccion;
            matricula.FEC_MS = toMatriculaSeccion.Fecha;

            dbml.SubmitChanges();

        }


    }
}
